package com.builder;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import com.model.Producto;
import com.view.EnvaseView;
import com.view.FamiliaView;
import com.view.MarcaView;
import com.view.ProductoView;
import com.view.UnidadDeMedidaView;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ProductoBuilder extends BaseBuilder<ProductoView, Producto> {

	// @ManagedProperty("#{unidadDeMedidaBuilder}")
	private UnidadDeMedidaBuilder unidadDeMedidaBuilder = new UnidadDeMedidaBuilder();

	// @ManagedProperty("#{familiaBuilder}")
	private FamiliaBuilder familiaBuilder = new FamiliaBuilder();

	// @ManagedProperty("#{marcaBuilder}")
	private MarcaBuilder marcaBuilder = new MarcaBuilder();

	// @ManagedProperty("#{envaseBuilder}")
	private EnvaseBuilder envaseBuilder = new EnvaseBuilder();

	public Producto toDomain(ProductoView view) {
		return new Producto(view.getId(), view.getCodigoProducto(),
				view.getDetalle(), view.getUnidadDeMedida() == null ? null
						: unidadDeMedidaBuilder.toDomain(view
								.getUnidadDeMedida()),
				view.getFamilia() == null ? null : familiaBuilder.toDomain(view
						.getFamilia()), view.getStockMinimo(),
				view.getMarca() == null ? null : marcaBuilder.toDomain(view
						.getMarca()), view.getEnvase() == null ? null
						: envaseBuilder.toDomain(view.getEnvase()),
				view.getPeso(), view.getDescripcion(),
				view.getImagen() != null ? view.getImagen().getContents()
						: null, view.getRutaArchivo(), view.getNombreArchivo());
	}

	public ProductoView toView(Producto model) {
		return new ProductoView(model.getID(), model.getCodigoProducto(),
				model.getDetalle(),
				model.getUnidadDeMedida() == null ? new UnidadDeMedidaView()
						: unidadDeMedidaBuilder.toView(model
								.getUnidadDeMedida()),
				model.getFamilia() == null ? new FamiliaView() : familiaBuilder
						.toView(model.getFamilia()), model.getStockMinimo(),
				model.getMarca() == null ? new MarcaView() : marcaBuilder
						.toView(model.getMarca()),
				model.getEnvase() == null ? new EnvaseView() : envaseBuilder
						.toView(model.getEnvase()), model.getPeso(),
				model.getDescripcion(), model.getImagen(),
				model.getRutaArchivo(), model.getNombreArchivo());
	}

	public UnidadDeMedidaBuilder getUnidadDeMedidaBuilder() {
		return unidadDeMedidaBuilder;
	}

	public void setUnidadDeMedidaBuilder(
			UnidadDeMedidaBuilder unidadDeMedidaBuilder) {
		this.unidadDeMedidaBuilder = unidadDeMedidaBuilder;
	}

	public FamiliaBuilder getFamiliaBuilder() {
		return familiaBuilder;
	}

	public void setFamiliaBuilder(FamiliaBuilder familiaBuilder) {
		this.familiaBuilder = familiaBuilder;
	}

	public MarcaBuilder getMarcaBuilder() {
		return marcaBuilder;
	}

	public void setMarcaBuilder(MarcaBuilder marcaBuilder) {
		this.marcaBuilder = marcaBuilder;
	}

	public EnvaseBuilder getEnvaseBuilder() {
		return envaseBuilder;
	}

	public void setEnvaseBuilder(EnvaseBuilder envaseBuilder) {
		this.envaseBuilder = envaseBuilder;
	}

}
